#ifndef MESH_TESTFUNCTIONS_H
#define MESH_TESTFUNCTIONS_H

#include "mesh.hpp"


/**
 * @brief Creates a mesh with 5 vertices and six edges, which looks like this:
 * vertices (vertex 3 at origin (0,0)):
 *      0
 *     /\
 *   1/__\2
 *    |  |
 *    |__|
 *   3    4
 * 
 * edges:
 *      
 *    0/\1
 *    /__\
 *    | 2|
 *   3|__|4
 *      5
 * 
 * reordered (inner edges first, boundary edges last => swapped {0 2})
 *    2/\1
 *    /__\
 *    | 0|
 *   3|__|4
 *      5
 *
 * cells
 * 
 *    3/\2
 *    /0_\
 *    | 1|
 *   4|__|5
 *      6
 *
 */
hms::Mesh testMeshMixed( bool createCells = false );


/*    vertices (origin at vertex 4)
 *  2_____5_____8
 *  |     |     |
 *  |     |     |
 *  1_____4_____7
 *  |     |     |
 *  |     |     |
 *  0_____3_____6
 *
 *      edges
 *   _10____11__ 
 *  |     |     |
 * 1|    3|    5|
 *  |_____|_____|
 *  |  8  |  9  |
 * 0|    2|    4|
 *  |_____|_____|
 *     6     7
 *
 *    reordered (0 with 8 and 1 with 9)
 *   _10____11__ 
 *  |     |     |
 * 9|    3|    5|
 *  |_____|_____|
 *  |  0  |  1  |
 * 8|    2|    4|
 *  |_____|_____|
 *     6     7                       ___________ 
 *                                  |     |     |
 *      cells          with ghosts  | 10  | 11  |
 *   ___________               _____|_____|_____|_____
 *  |     |     |             |     |     |     |     |
 *  |  1  |  3  |             |  9  |  1  |  3  |  5  |
 *  |_____|_____|             |_____|_____|_____|_____|
 *  |     |     |             |     |     |     |     |
 *  |  0  |  2  |             |  8  |  0  |  2  |  4  |
 *  |_____|_____|             |_____|_____|_____|_____|
 *                                  |     |     |
 *                                  |  6  |  7  |
 *                                  |_____|_____|
 */
hms::Mesh testMeshRectangles( bool createCells = false );


/*    vertices (origin at vertex 0)
 *      3_____4
 *    ,/\    /\
 *  2/   \  /  \
 *   \`'-,\/____\
 *    \  ./0     5
 *     \/
 *     1
 *
 *      edges
 *      __7___
 *   6,/\    /\
 *   /   2  1  8
 *   \`'3,\/____\
 *    5  ./   0
 *     \/4
 *
 *    reordered {0 3}
 *      __7___
 *   6,/\    /\
 *   /   2  1  8
 *   \`'0,\/____\
 *    5  ./   3
 *     \/4
 *
 *      cells (incl. ghost cells)
 * 
 *      __8___
 *  7 ,/\    /\
 *   / 2 \ 1/ 0\ 9
 *   \`'-,\/____\
 *  6 \ 3./   4
 *     \/  5
 * 
 */
hms::Mesh testMeshTriangles( bool createCells = false );

#endif
